Вы отвечаете за
сервер, на котором необходимо выполнить несколько задач по принципу первый
пришел – первый выполнен. Каждый день для выполнения этих задач Вы можете
выделить на сервере более t минут.
Зная время выполнения каждой задачи, Вы хотите определить, сколько задач будут
выполнены сегодня.
Рассмотрим
следующий пример. Пусть t = 180,
время выполнения задач равны 45, 30, 55, 20, 80 и 20 минут (именно в таком
порядке). Только четыре задания могут быть выполнены. На выполнение первых
четырех задач следует потратить 150 минут. Пять заданий выполнить нельзя, так
как тогда потребуется 230 минут, что больше 180. Несмотря на то что еще
останется время на выполнение шестой задачи (на которую требуется 20 минут),
после четвертой задачи нельзя выполнить шестую, так как пятая еще не совершена.
Вход. Первая строка содержит два целых числа n (1 ≤ n ≤ 50) и t (1
≤ t ≤ 500), где n – количество задач. Следующая строка
содержит n натуральных чисел, не
больших 100, указывающих на время выполнения каждой задачи.
Выход. Выведите
количество задач, которое может быть выполнено за t минут по принципу первый пришел – первый выполнен.
Пример
входа |
Пример
выхода |
6 180 45 30 55 20
80 20 |
4 |
обработка
массивов
Анализ алгоритма
Вычисляем
префиксные суммы, пока они не станут большими t. Количество чисел в последней префиксной сумме, не большей t, равно искомому выполненному числу
задач.
Реализация алгоритма
Читаем входные данные.
scanf("%d %d",&n,&t);
res = s = 0;
Обрабатываем задачи на сервере последовательно.
for(i = 0; i < n; i++)
{
scanf("%d",&val);
Считаем сумму чисел.
s += val;
Как только сумма s
превзойдет t – останавливаемся
обрабатывать задачи. Количество слагаемых res
в ней и является ответом.
if (s > t)
break;
res++;
}
Выводим ответ.
printf("%d\n",res);
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt();
int t = con.nextInt();
int res = 0, s = 0;
for(int i = 0; i < n; i++)
{
int x = con.nextInt();
s += x;
if (s > t) break;
res++;
}
System.out.println(res);
con.close();
}
}
Python реализация
n, t = map(int,input().split())
lst = list(map(int,input().split()))
res = s = 0
for i in range(n):
s
+= lst[i]
if (s > t): break
res += 1
print(res)